#include <stdio.h>
#include <windows.h>
#include <string.h>
//1.计算n的阶乘！1*2*3*...*n,顺序来会更好理解跟写代码！！！
//int main() {
//    int i = 1,n = 0,ret = 1;
//    scanf("%d",&n);
//    for(i = 1;i <= n;i++){
//        ret = ret * i;
//    }
//    printf("%d",ret);
//    return 0;
//}//不要考虑数字溢出，算太大的数超出int的范围了。

//2.计算1！+2!+3!+...+10!
//先遍历出来这些数，算完之后再相加。是不是要找一个数来存储它上一次阶乘的数。
//int main(){
//    int i = 1,n = 0,ret = 1,sum = 0;
    //法一：两次for循环；
//    for(n = 1;n <= 10;n++){
//        ret = 1;//每次ret必须回归为1，要不然存储的就是上一次的值！
//        for(i = 1;i <= n;i++){
//            ret = ret * i;
//        }
//        sum = sum + ret;
//    }
//    printf("%d",sum);
    //法二：1!
    //     1 * 2 = 2! = 1! * 2
    //     1 * 2 * 3 = 3! = 2! * 3
    //     1 * 2 * 3 * 4 = 4! = 3! * 4
    //     ......
    //     充分利用前面算过的阶乘
    //     比较巧妙，很难想。
//    for(i = 1;i <= 10;i++){
//        ret = ret * i;
//        sum = sum + ret;
//    }
//    printf("%d",sum);
//    return 0;
//}


//int main(){
//    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//    int n = 8,i = 0;
//    for(i = 0;i <= 9;i++){
//        if(arr[i] == n){
//            printf("%d\n",i);
//            break;
//        }
//    }
//    return 0;
//}遍历查询

//1.首先要有一个有序的数组。2.要有一个待查找的数。3.设置一个变量i等待最后的打印结果就是打印出找到的这个数下标是：
//4.利用二分查找移动下标进行比较。5.先写循环体再选用循环名称。
//int main(){
//    int arr[] = {1,2,3,4,5,6,7,8,9,10};
//    int number = 17;
//    //int sub = 0;
//    int left = 0;
//    int right = sizeof(arr)/sizeof(arr[0]) - 1;
//    int mid = (left + right) / 2;
//    while(left <= right){
//        if(number > arr[mid]){
//            left = mid + 1;
//        }else if(number < arr[mid]){
//            right = mid -1;
//        }else{
//            printf("The number sub is %d\n",mid);//我们是将数字跟中间的下标进行比较，不是将左下标跟数字进行比较。
//            break;
//        }
//        mid = (left + right) / 2;
//    }
//    if(left > right){
//        printf("There is not this number.\n");
//    }
//    return 0;
//}


//第四题：编写代码，演示多个字符向两端移动，向中间汇聚。
//意思就是说：有一串字符a，也有一串#或者*等其他字符的字符串b，两者个数相等。
//每次变换：a的前后两端第一个字符分别向里面靠近一个字符，代替了#或者*等其他字符。
//#字符串怎么把原字符串遮住呢？定义一个左下标跟右下标每次不断替换。
//还是利用下标，每次下标减一。定义一个左下标跟右下标，当左下标大于右下标时，循环停止。
//int main(){
//    char c[] = "Hello,Bit.";
//    char d[] = "##########";
//    int left = 0;
//    int right = sizeof(c) / sizeof(c[0]) - 2;//'\0'打印不出来！
//    //printf("%d",sizeof(c)/sizeof(c[0]));
//    //d[0] = 'a';//改字符串数组的元素
//    //printf("%s",d);
//    if(left <= right){
//        printf("%s\n",d);
//        while(left <= right){    //等号照顾偶数个下标。
//            d[left] = c[left];
//            d[right] = c[right];
//            printf("%s\n",d);//你怕的话可以先把它给打印出来，然后再变坐标。这样逻辑会更顺一点。
//            left+=1;
//            right-=1;
//            Sleep(1500);
//            //printf("%s\n",d);
//        }
//    }else{
//        printf("Sorry,there is not function.\n");
//    }
//    return 0;
//}



//第五题、编写代码实现：模拟用户登录情景，并且只能登陆三次。
//（只允许输入三次密码，如果密码正确则提示登陆成功，如果三次均输入错误，则（显示）退出程序。
//那么首先必然的，你得原始密码，意即你得设置一套密码。其次再输入一些密码，两者进行比较。
//重中之重，完整的接收到你输入的密码字符串。
//这个就好复杂了，首先比较长度，如果长度不相等，则直接输入错误；如果长度相等，再遍历。
//int main(){
//    char c[] = "2024kaoyanchenggong";
//    char d[20] = {0};//等掌握了动态输入字符串长度来建立数组再回来修改。
//    int i = 0,sz = sizeof(c) / sizeof(c[0]),sub = 0;
//    for (i = 0; i < 3; i++) {
//        printf("Please enter your PIN:");
//        scanf("%s", d);
//        int sz1 = sizeof(d) / sizeof(d[0]);
//        if (sz1 > sz || sz1 < sz) {
//            printf("The PIN is wrong.\n");
//        } else {
//            while(sub <=sz - 2){
//                if(strcmp(d,c) == 0){
//                    printf("Success!\n");
//                    break;
//                }else if(d[sub] != c[sub]){
//                    printf("The PIN is wrong.\n");
//                    break;
//                }//先比较，如果中间有任何一个都不相等，立刻跳出循环。
//                    sub += 1;
//                   // printf("Success!\n");//我不知道最后比较全部相等之后怎么打印出来成功。
//            }
//        }
//    }
//    if(i >= 3){
//        printf("Quit.\n");
//    }
//    return 0;
//}
//如果你要计算阶乘的话，首先得有一个数，再设一个数存储它。
int main(){
    int a = 1,n = 0,ret = 1;
    scanf("%d",&n);
    while(a <= n){
        ret = ret * a;
        a++;
    }
    printf("%d",ret);
    return 0;
}